
const anim_res = cc.Class({
    name: "anim_res",
    properties: {
        images:{
            default: [], //每个方向几个动画
            type: cc.SpriteFrame,
        },
    },
});

cc.Class({
    extends: cc.Component,

    properties: {
        speed:2,
        walk_anim:{
            type: anim_res,
            default: [], //N个方向
        }
    },

    // onLoad () {},

    start () {

    },
    /**
     * 初始化基础信息
     * 1. 判断当前角色是否正在移动
     * 2. 判断当前角色是否在战斗状态
     * 3. 当前角色的移动时间，过去的时间
     * 4.移动用normalize归一化方向向量后，乘以时间+起始位置，就可以了。不用三角函数。
     * */ 
    initialRoleData(){
        this.is_walking = true;
        this.passed_time = 0; //过去的时间
        this.walk_time = 0; //移动时间
    },

    // 步长计算
    walkToDst(dist){
        var src = this.node.getPosition();
        var step = dist.sub(src); //方向向量
        let len = step.mag();//解释：获取两点之间的距离
        if(len <= 0) return;//鼠标点击的位置在附近，因此代码截断
        // 要移动到目标位置，需要的状态，时间，x,y的方向速度
        this.is_walking = true;
         this.passed_time = 0;
        this.walk_time = len / this.speed; 
        this.vx = (step.x /len) * this.speed;
        this.vy = (step.y /len) * this.speed;
    },
    update (dt) {
        // 根据移动的时长，结合过去的时间，判断当前角色是否移动结束
        if(!this.is_walking) return;
        this.passed_time += dt;
        if(this.passed_time> this.walk_time){
            dt -= (this.passed_time - this.walk_time);
        }
        this.node.x += this.vx * dt;
        this.node.y += this.vy * dt;
        if(this.passed_time >= this.walk_time){
            this.is_walking = false ;
        }
    },
});
